delete params.onStopped;
return isFinished => {
- cleanup();
+ cleanup?.();
if (onStopped)
onStopped(isFinished);
};
}
-function _makeEasePrepareAndCleanup() {
+function _makeEasePrepareAndCleanup(duration) {
+ if (!duration)
+ return {prepare: null, cleanup: null};
+
const prepare = () => {
global.compositor.disable_unredirect();
global.begin_work();
actor.set_easing_mode(params.mode);
delete params.mode;
- const {prepare, cleanup} = _makeEasePrepareAndCleanup();
+ const easingDuration = actor.get_easing_duration();
+ const {prepare, cleanup} = _makeEasePrepareAndCleanup(easingDuration);
const callback = _makeEaseCallback(params, cleanup);
// cancel overwritten transitions
let animatedProps = Object.keys(params).map(p => p.replace('_', '-', 'g'));
animatedProps.forEach(p => actor.remove_transition(p));
- if (actor.get_easing_duration() > 0 || !isReversed)
+ if (easingDuration > 0 || !isReversed)
actor.set(params);
actor.restore_easing_state();
const [transition] = transitions;
- if (transition && transition.delay)
- transition.connectObject('started', () => prepare(), sessionSignalHolder);
- else
- prepare();
+ if (prepare) {
+ if (transition?.delay)
+ transition.connectObject('started', () => prepare(), sessionSignalHolder);
+ else
+ prepare();
+ }
if (transition) {
transition.connectObject('stopped', (t, finished) => callback(finished),
if (!actor?.mapped)
duration = 0;
- const {prepare, cleanup} = _makeEasePrepareAndCleanup();
+ const {prepare, cleanup} = _makeEasePrepareAndCleanup(duration);
const callback = _makeEaseCallback(params, cleanup);
// cancel overwritten transition
if (!isReversed)
obj[prop] = target;
- prepare();
+ prepare?.();
callback(true);
return;
transition.set_to(target);
- if (transition.delay)
- transition.connectObject('started', () => prepare(), sessionSignalHolder);
- else
- prepare();
+ if (prepare) {
+ if (transition.delay)
+ transition.connectObject('started', () => prepare(), sessionSignalHolder);
+ else
+ prepare();
+ }
transition.connectObject('stopped',
(t, finished) => callback(finished), sessionSignalHolder);